// 工具类（需在原生渲染环境下运行）
import md5 from 'crypto-js/md5';

const CACHE_DIR = '_map_icons/';

// 获取处理后的圆形图片路径
export const getCircleImage = async (url) => {
	const cacheKey = md5(url).toString();
	const cachePath = `${CACHE_DIR}${cacheKey}.png`;

	// 检查缓存
	const cached = await checkCache(cachePath);
	if (cached) return cached;

	// 下载并处理
	const tempPath = await downloadFile(url);
	const processedPath = await processImage(tempPath);

	// 保存缓存
	await saveCache(processedPath, cachePath);
	return cachePath;
};

// 检查缓存是否存在
const checkCache = async (path) => {
	try {
		const res = await uni.getFileInfo({
			filePath: path
		});
		return res.size > 0 ? path : null;
	} catch (e) {
		return null;
	}
};

// 下载网络图片
const downloadFile = (url) => new Promise((resolve, reject) => {
	uni.downloadFile({
		url,
		success: (res) => {
			if (res.statusCode === 200) {
				resolve(res.tempFilePath);
			} else {
				reject(new Error('下载失败'));
			}
		},
		fail: reject
	});
});

// 使用原生API处理图片
const processImage = (tempPath) => {
  return new Promise((resolve, reject) => {
    // #ifdef APP-PLUS
    console.log('[1/6] 开始处理图片，临时路径:', tempPath);
    
    // 检查 plus 环境
    if (typeof plus === 'undefined') {
      console.error('[ERROR] plus 对象未定义');
      return reject(new Error('PLUS环境未初始化'));
    }
    if (!plus.nativeObj.graphics) {
      console.error('[ERROR] plus.graphics 不可用');
      return reject(new Error('缺少图形模块支持'));
    }

    // 标准化路径
    if (!tempPath.startsWith('file://')) {
      tempPath = 'file://' + tempPath;
      console.log('[2/6] 修正后路径:', tempPath);
    }

    try {
      console.log('[3/6] 创建Bitmap实例');
      const bitmap = new plus.graphics.Bitmap(tempPath);
      
      bitmap.load(tempPath, () => {
        console.log('[4/6] 图片加载成功，尺寸:', bitmap.width, 'x', bitmap.height);
        const size = Math.min(bitmap.width, bitmap.height);
        

        // 创建Canvas
        const canvas = new plus.nativeObj.graphics.Canvas(size, size);
        const ctx = canvas.getContext('2d');
        console.log('[5/6] Canvas创建完成，尺寸:', size);

        // 绘制圆形
        ctx.beginPath();
        ctx.arc(size/2, size/2, size/2, 0, Math.PI*2);
        ctx.clip();
        ctx.drawImage(bitmap, 0, 0, size, size);
        console.log('[6/6] 图片绘制完成');

        // 生成新图片
        canvas.toTempFilePath({
          success: (res) => {
            console.log('✅ 图片生成成功:', res.tempFilePath);
            bitmap.release();
            canvas.recycle();
            resolve(res.tempFilePath);
          },
          fail: (err) => {
            console.error('❌ 图片生成失败:', JSON.stringify(err));
            bitmap.release();
            canvas.recycle();
            reject(new Error('CANVAS_SAVE_FAIL'));
          }
        });
      }, (err) => {
        console.error('❌ 图片加载失败:', JSON.stringify(err));
        reject(new Error('IMAGE_LOAD_FAIL'));
      });
    } catch (e) {
      console.error('❌ 初始化异常:', e);
      reject(new Error('INIT_ERROR: ' + e.message));
    }
    // #endif

    // #ifndef APP-PLUS
    reject(new Error('UNSUPPORTED_PLATFORM'));
    // #endif
  });
};

// 保存到缓存目录
const saveCache = async (srcPath, destPath) => {
	await uni.saveFile({
		tempFilePath: srcPath,
		filePath: destPath
	});
};